# 导入TensorFlow库中的Keras模块
import tensorflow as tf

# 创建一个顺序模型
model = tf.keras.models.Sequential([
    # 第一层是卷积层，使用32个过滤器（卷积核），每个卷积核的大小是3x3
    # padding='same'表示输出特征图的大小与输入特征图相同
    # input_shape=(28,28,1)表示输入数据的形状，这里是28x28的灰度图像
    # activation='relu'表示使用ReLU激活函数
    tf.keras.layers.Conv2D(filters=32, kernel_size=(3,3), padding='same',
                 input_shape=(28,28,1),  activation='relu'),
    
    # 第二层是最大池化层，pool_size=(2, 2)表示池化窗口的大小是2x2
    tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),
    
    # 第三层是卷积层，使用64个过滤器，其他参数与第一层相同
    tf.keras.layers.Conv2D(filters=64, kernel_size=(3,3), padding='same', 
    			 activation='relu'),
    
    # 第四层是最大池化层，与第二层相同
    tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),
    
    # 第五层是Dropout层，丢弃率为0.25，用于减少过拟合
    tf.keras.layers.Dropout(0.25),
    
    # 第六层是Flatten层，将多维输入一维化，以便可以输入到全连接层
    tf.keras.layers.Flatten(),
    
    # 第七层是全连接层，有128个神经元，使用ReLU激活函数
    tf.keras.layers.Dense(128, activation='relu'),
    
    # 第八层是Dropout层，丢弃率为0.5，进一步减少过拟合
    tf.keras.layers.Dropout(0.5),
    
    # 第九层是输出层，有10个神经元，使用softmax激活函数，用于多分类问题
    # 这里的10可能代表有10个类别
    tf.keras.layers.Dense(10,activation='softmax')
])